Appearance
《C语言程序设计》第一学期期末补考试卷A (精选05)
一、单项选择题(本大题共20题,每题2分,共40分)
(1) 以下不是 C 语言的特点的是 (B)。
A. C语言简洁、紧凑
B. 能够编制出功能复杂的程序
C. C语言可以直接对硬件进行操作
D. C语言移植性好
查看答案与解析
答案:B
解析: 能够编制出功能复杂的程序不是 C 语言特有的特点,几乎所有编程语言都可以编制复杂程序。C 语言的特点包括:简洁紧凑、可直接操作硬件、移植性好、效率高、功能强大等。
难度: ⭐
考点: #C语言特点
💡 学习锦囊
📖 相关公式与知识点:
- C 语言主要特点:简洁高效、可移植、可直接访问硬件、丰富的数据类型和运算符。
思路分析
注意题目问的是"不是 C 语言特点"的选项。
🔄 举一反三
- C 语言相比其他高级语言的主要优势是什么?
查看练习答案与解析
答案:执行效率高,可直接操作内存和硬件。 解析:C 语言是中级语言,兼具高级语言的易用性和低级语言的高效性。
(2) 以下不正确的 C 语言标识符是 (D)。
A. ABC
B. abc
C. a_bc
D. ab.c
查看答案与解析
答案:D
解析: C 语言标识符只能由字母、数字和下划线组成,且不能以数字开头。D 选项包含小数点 .,不符合标识符命名规则。
难度: ⭐
考点: #标识符
💡 学习锦囊
📖 相关公式与知识点:
- 标识符规则:字母/下划线开头,后续可为字母、数字、下划线。
- 关键字不能作为标识符。
思路分析
标识符中不能包含特殊字符如 .、@、# 等。
🔄 举一反三
- 以下哪些是合法标识符?
_abc,123abc,int查看练习答案与解析
答案:
_abc合法;123abc不合法(数字开头);int不合法(关键字)。
(3) 一个 C 语言程序是由 (B)。
A. 一个主程序和若干子程序组成
B. 函数组成
C. 若干过程组成
D. 若干子程序组成
查看答案与解析
答案:B
解析: C 语言程序的基本组成单位是函数。一个 C 程序由一个 main 函数和若干其他函数组成。
难度: ⭐
考点: #程序结构
💡 学习锦囊
📖 相关公式与知识点:
- C 程序 = 函数集合。
- 必须有且只有一个 main 函数作为入口。
思路分析
C 语言没有"过程"或"子程序"的概念,统一称为函数。
🔄 举一反三
- C 程序中是否可以没有 main 函数?
查看练习答案与解析
答案:不可以 解析:main 函数是程序的唯一入口,必须有且只有一个。
(4) 一个算法应该具有"确定性"等5个特性,对另外4个特性的描述中错误的是 (B)。
A. 有零个或多个输入
B. 有零个或多个输出
C. 有穷性
D. 可行性
查看答案与解析
答案:B
解析: 算法的五个特性:有穷性、确定性、可行性、有零个或多个输入、有一个或多个输出。算法必须有输出,否则没有意义。
难度: ⭐
考点: #算法特性
💡 学习锦囊
📖 相关公式与知识点:
- 算法五大特性:有穷性、确定性、可行性、输入(0或多个)、输出(1或多个)。
思路分析
注意输出至少有一个,不能为零个。
🔄 举一反三
- 算法的时间复杂度衡量的是什么?
查看练习答案与解析
答案:算法执行时间随输入规模增长的趋势。 解析:时间复杂度用大 O 表示法,如 O(n)、O(n²)。
(5) 设变量 a 是整型,f 是实型,i 是双精度型,则表达式 10 + a + i * f 的值类型为 (C)。
A. int
B. float
C. double
D. 不确定
查看答案与解析
答案:C
解析: 表达式中 i 是 double 类型,f 是 float 类型。运算时 float 会提升为 double,最终结果类型为 double。
难度: ⭐⭐
考点: #类型转换
💡 学习锦囊
📖 相关公式与知识点:
- 隐式类型转换方向:char → int → float → double。
- 表达式结果类型取最高精度操作数的类型。
思路分析
混合运算时,低精度类型向高精度类型转换。
🔄 举一反三
int a = 3; float b = 2.5;则a + b的类型是什么?查看练习答案与解析
答案:float 解析:int 提升为 float,结果为 float。
(6) 在 C 语言中,char 型数据在内存中的存储形式是 (D)。
A. 补码
B. 反码
C. 原码
D. ASCII 码
查看答案与解析
答案:D
解析: char 型数据在内存中以 ASCII 码的形式存储。例如 'A' 存储为 65(十进制)。
难度: ⭐
考点: #字符存储
💡 学习锦囊
📖 相关公式与知识点:
- char 占 1 字节(8 位)。
- 有符号 char 范围:-128 ~ 127;无符号 char 范围:0 ~ 255。
思路分析
字符本质上是整数,可以参与算术运算。
🔄 举一反三
char c = 'A'; printf("%c", c + 1);输出什么?查看练习答案与解析
答案:B 解析:'A' 的 ASCII 码为 65,加 1 后为 66,即 'B'。
(7) 有如下程序,输入数据:12345M678<CR> 后(<CR> 表示回车),x 的值是 (B)。
#include <stdio.h>
main()
{
int x;
float y;
scanf("%3d%f", &x, &y);
}2
3
4
5
6
7
A. 12345
B. 123
C. 45
D. 345
查看答案与解析
答案:B
解析:%3d 表示读取最多 3 位整数,所以 x = 123。后面的 "45M678" 中,"45" 被 %f 读取为 y 的值(45.0),"M" 不是数字,scanf 在此处停止。
难度: ⭐⭐
考点: #scanf格式控制
💡 学习锦囊
📖 相关公式与知识点:
%3d:读取最多 3 位宽度的整数。%f遇到非数字字符会停止读取。
思路分析
注意 scanf 的宽度限制和遇到非法字符时的行为。
🔄 举一反三
- 若输入
123456,x 和 y 的值分别是多少?查看练习答案与解析
答案:x=123, y=456.0 解析:%3d 取 123,%f 取 456。
(8) 若有以下定义 int a, b; float x;,则正确的赋值语句是 (C)。
A. a = 1, b = 2
B. b++
C. a = b = 5
D. b = int(x)
查看答案与解析
答案:C
解析: A 是逗号表达式,不是赋值语句(缺少分号且整体不是语句)。B 是自增表达式,不是赋值语句。C 是连续赋值,合法。D 语法错误,应为 b = (int)x。
难度: ⭐⭐
考点: #赋值语句
💡 学习锦囊
📖 相关公式与知识点:
- 强制类型转换格式:
(类型)表达式。 - 连续赋值:从右向左执行。
思路分析
区分表达式和语句,注意强制类型转换的语法。
🔄 举一反三
float x = 3.14; int b = (int)x;后 b 的值是多少?查看练习答案与解析
答案:3 解析:强制类型转换截断小数部分,不进行四舍五入。
(9) 以下程序的执行结果是 (A)。
#include <stdio.h>
main()
{
int i = 10, j = 10;
printf("%d,%d\n", ++i, j--);
}2
3
4
5
6
A. 11, 10
B. 9, 10
C. 11, 9
D. 10, 9
查看答案与解析
答案:A
解析:++i 先增后用,输出 11。j-- 先用后减,输出 10。
难度: ⭐
考点: #自增自减
💡 学习锦囊
📖 相关公式与知识点:
++i:先自增,再参与运算。i++:先参与运算,再自增。
思路分析
注意前缀和后缀的区别。
🔄 举一反三
int a=5; printf("%d", a++ + ++a);输出是多少?(注意:此为未定义行为)查看练习答案与解析
答案:结果不确定(未定义行为) 解析:同一表达式中多次修改同一变量是未定义行为,应避免。
(10) 已知字母 A 的 ASCII 码是 65,以下程序的执行结果是 (D)。
#include <stdio.h>
main()
{
char c1 = 'A', c2 = 'Y';
printf("%d,%d\n", c1, c2);
}2
3
4
5
6
A. A,Y
B. 65,65
C. 65,90
D. 65,89
查看答案与解析
答案:D
解析: 'Y' 的 ASCII 码 = 'A' + 24 = 65 + 24 = 89。%d 输出 ASCII 码值。
难度: ⭐
考点: #ASCII码
💡 学习锦囊
📖 相关公式与知识点:
- 'A' = 65, 'Z' = 90, 'a' = 97, 'z' = 122。
思路分析
大写字母 'A'-'Z' 的 ASCII 码是连续的 65-90。
🔄 举一反三
- 小写字母 'a' 的 ASCII 码是多少?'a' 和 'A' 相差多少?
查看练习答案与解析
答案:'a'=97,相差 32 解析:大小写字母 ASCII 码差值为 32,'a' - 'A' = 32。
(11) 下列运算符中优先级最高的是 (C)。
A. <
B. +
C. %
D. !=
查看答案与解析
答案:C
解析: 算术运算符(+、-、*、/、%)优先级高于关系运算符(<、>、<=、>=)和等于运算符(==、!=)。在算术运算符中,*、/、% 优先级高于 +、-。
难度: ⭐
考点: #运算符优先级
💡 学习锦囊
📖 相关公式与知识点:
- 优先级从高到低:算术 > 关系 > 逻辑 > 赋值。
思路分析
记住常见运算符的优先级顺序。
🔄 举一反三
- 表达式
3 + 4 * 2 > 10 && 5 != 3的值是多少?查看练习答案与解析
答案:1(真) 解析:
3+8=11>10为真,5!=3为真,1&&1=1。
(12) 设 x、y 和 z 是 int 型变量,且 x=3, y=4, z=5,则下面表达式中值为 0 的是 (D)。
A. x && y
B. x <= y
C. x || y + z && y - z
D. !(x < y) && !z && 1
查看答案与解析
答案:D
解析:
- A:
x && y=3 && 4= 1(真) - B:
x <= y=3 <= 4= 1(真) - C:
x || y + z && y - z=3 || (9 && -1)=3 || 1= 1(真) - D:
!(x < y) && !z && 1=!(3<4) && !5 && 1=0 && 0 && 1= 0(假)
D 选项值为 0,选 D。
难度: ⭐⭐
考点: #逻辑运算
💡 学习锦囊
📖 相关公式与知识点:
&&优先级高于||。!优先级最高。&&运算:全真才真,一假即假。
思路分析
注意运算符优先级和短路求值。
🔄 举一反三
int a=0, b=5; int c = a && b++;后 b 的值是多少?查看练习答案与解析
答案:5 解析:a=0 为假,短路求值,b++ 不执行,b 仍为 5。
(13) 判断 char 型变量 c1 是否为小写字母的正确表达式为 (D)。
A. 'a' <= c1 <= 'z'
B. (c1 >= a) && (c1 <= z)
C. ('a' >= c1) || ('z' <= c1)
D. (c1 >= 'a') && (c1 <= 'z')
查看答案与解析
答案:D
解析: A 语法错误(不能连续比较)。B 中 a 和 z 未加引号,是变量而非字符。C 逻辑错误。D 正确判断 c1 是否在 'a' 到 'z' 之间。
难度: ⭐
考点: #关系表达式
💡 学习锦囊
📖 相关公式与知识点:
- 字符比较本质是比较 ASCII 码。
- 字符常量必须用单引号括起来。
思路分析
注意字符常量的引号不能省略。
🔄 举一反三
- 判断变量 ch 是否为大写字母的表达式是什么?
查看练习答案与解析
答案:
(ch >= 'A') && (ch <= 'Z')解析:同理,判断数字字符:(ch >= '0') && (ch <= '9')。
(14) 字符串 "a" 在内存中占据的字节个数为 (C)。
A. 0
B. 1
C. 2
D. 3
查看答案与解析
答案:C
解析: 字符串 "a" 包含字符 'a' 和结束符 '\0',共 2 个字节。
难度: ⭐
考点: #字符串存储
💡 学习锦囊
📖 相关公式与知识点:
- C 字符串以 '\0' 结尾。
"a"占 2 字节:'a' 和 '\0'。
思路分析
字符串长度(strlen)和占用空间(sizeof)的区别。
🔄 举一反三
char s[10] = "abc";则strlen(s)和sizeof(s)分别是多少?查看练习答案与解析
答案:strlen=3, sizeof=10 解析:strlen 统计到 '\0' 前的字符数,sizeof 是整个数组的大小。
(15) 下面有关 for 循环的正确描述是 (D)。
A. for 循环只能用于循环次数已经确定的情况
B. for 循环是先执行循环体语句,后判定表达式
C. 在 for 循环中,不能用 break 语句跳出循环体
D. for 循环体语句中,可以包含多条语句,但要用花括号括起来
查看答案与解析
答案:D
解析: A 错误,for 循环也可用于次数不确定的情况。B 错误,for 先判定后执行。C 错误,可以用 break。D 正确,多条语句需用花括号组成复合语句。
难度: ⭐
考点: #for循环
💡 学习锦囊
📖 相关公式与知识点:
- for 循环格式:
for(初始化; 条件; 迭代) 语句。 - 循环体多条语句时必须用
{}括起来。
思路分析
for 循环的三个表达式都可以省略,但分号不能省略。
🔄 举一反三
for( ; ; )是什么含义?查看练习答案与解析
答案:无限循环(死循环) 解析:三个表达式都省略,条件默认为真,等价于
while(1)。
(16) 下面程序的运行结果是 (C)。
#include <stdio.h>
main()
{
int num = 0;
while (num <= 2)
{
num++;
printf("%d ", num);
}
}2
3
4
5
6
7
8
9
10
A. 1
B. 1 2
C. 1 2 3
D. 1 2 3 4
查看答案与解析
答案:C
解析:
- num=0:num++ 后 num=1,输出 1。1<=2,继续。
- num=1:num++ 后 num=2,输出 2。2<=2,继续。
- num=2:num++ 后 num=3,输出 3。3>2,结束。
输出:1 2 3
难度: ⭐
考点: #while循环
💡 学习锦囊
📖 相关公式与知识点:
- while 先判断后执行。
- 注意循环条件和循环体内对变量的修改。
思路分析
追踪 num 的值变化,注意判断条件和自增的时机。
🔄 举一反三
- 若将
num++放在printf之后,输出是什么?查看练习答案与解析
答案:0 1 2 解析:先输出当前值再自增,循环条件判断的是自增前的值。
(17) 以下描述正确的是 (C)。
A. 由于 do-while 循环中循环体语句只能是一条可执行语句,所以循环体内不能使用复合语句
B. do-while 循环由 do 开始,用 while 结束,在 while(表达式)后面不能写分号
C. 在 do-while 循环体中,一定要有能使 while 后面表达式的值变成零("假")的操作
D. do-while 循环中,根据情况可以省略 while
查看答案与解析
答案:C
解析: A 错误,循环体可以是复合语句。B 错误,while 后面必须有分号。C 正确,否则死循环。D 错误,while 不能省略。
难度: ⭐
考点: #do-while循环
💡 学习锦囊
📖 相关公式与知识点:
- do-while 语法:
do { 循环体 } while(条件); - 注意 while 后有分号。
思路分析
do-while 至少执行一次,注意避免死循环。
🔄 举一反三
- do-while 和 while 的主要区别是什么?
查看练习答案与解析
答案:do-while 先执行后判断,至少执行一次;while 先判断后执行,可能一次都不执行。
(18) 以下对一维整型数组 a 的正确说明是 (D)。
A. int a(10);
B. int n = 10, a[n];
C. int n; scanf("%d", &n); int a[n];
D. int a[10];
查看答案与解析
答案:D
解析: A 错误,数组用方括号 [] 而非圆括号 ()。B 和 C 错误,传统 C 语言中数组大小必须是常量表达式(C99 支持变长数组,但题目通常按传统 C 考虑)。D 正确。
难度: ⭐
考点: #数组定义
💡 学习锦囊
📖 相关公式与知识点:
- 数组定义:
类型 数组名[常量表达式]; - C99 支持变长数组(VLA),但传统 C 不支持。
思路分析
注意数组定义的语法规则。
🔄 举一反三
int a[] = {1, 2, 3};数组 a 的长度是多少?查看练习答案与解析
答案:3 解析:初始化时省略长度,编译器根据初始化列表自动确定。
(19) 以下对二维数组 a 的正确说明是 (C)。
A. int a[3][];
B. float a(3,4);
C. double a[1][4];
D. float a(3)(4);
查看答案与解析
答案:C
解析: A 错误,二维数组可以省略第一维大小,但不能省略第二维。B 和 D 错误,数组用方括号。C 正确。
难度: ⭐
考点: #二维数组定义
💡 学习锦囊
📖 相关公式与知识点:
- 二维数组定义:
类型 数组名[行数][列数]; - 初始化时可以省略行数,但不能省略列数。
思路分析
牢记二维数组定义的语法。
🔄 举一反三
int a[][3] = { {1,2,3}, {4,5,6} };数组 a 有几行?查看练习答案与解析
答案:2 行 解析:初始化列表有两组,编译器自动确定行数为 2。
(20) 若二维数组 a 有 m 列,则在 a[i][j] 前面的元素个数为 (B)。
A. j * m + i
B. i * m + j
C. i * m + j - 1
D. i * m + j + 1
查看答案与解析
答案:B
解析: 二维数组按行存储。a[i][j] 前面有 i 行完整的元素(每行 m 个),加上第 i 行的 j 个元素,共 i * m + j 个。
难度: ⭐⭐
考点: #二维数组存储
💡 学习锦囊
📖 相关公式与知识点:
- 二维数组按行优先存储。
a[i][j]的地址 = 基地址 + (i * m + j) * sizeof(元素类型)。
思路分析
理解二维数组在内存中的线性存储方式。
🔄 举一反三
- 若二维数组 a 有 n 列,
a[i][j]是数组中的第几个元素(从 0 开始计数)?查看练习答案与解析
答案:第
i * n + j个 解析:前面有 i 行(每行 n 个)加上当前行的 j 个。
二、填空题(本大题共10空,每空2分,共20分)
(1) 结构化设计中的三种基本结构是 顺序结构、选择结构、循环结构。
查看答案与解析
答案: 顺序结构、选择结构、循环结构
解析: 结构化程序设计的三种基本控制结构:顺序、选择(分支)、循环。
难度: ⭐
考点: #程序结构
💡 学习锦囊
📖 相关公式与知识点:
- 任何程序都可以用这三种基本结构组合实现。
思路分析
这是程序设计的基础概念。
🔄 举一反三
- 三种基本结构各自的特点是什么?
查看练习答案与解析
答案:顺序结构——按书写顺序执行;选择结构——根据条件选择执行路径;循环结构——重复执行某段代码。
(2) 在 C 语言中的实型变量分为两种类型,它们是 float(单精度) 和 double(双精度)。
查看答案与解析
答案: float、double
解析: C 语言的实型(浮点型)包括 float(4字节)和 double(8字节)。
难度: ⭐
考点: #数据类型
💡 学习锦囊
📖 相关公式与知识点:
- float:约 6-7 位有效数字。
- double:约 15-16 位有效数字。
思路分析
注意 long double 在某些编译器中也存在。
🔄 举一反三
- float 和 double 各占几个字节?
查看练习答案与解析
答案:float 占 4 字节,double 占 8 字节。 解析:这是 C 标准的规定,不同编译器可能略有差异。
(3) 当 a=5, b=4, c=2 时,表达式 a > b != c 的值是 1。
查看答案与解析
答案: 1
解析:a > b = 5 > 4 = 1(真)。1 != c = 1 != 2 = 1(真)。
难度: ⭐⭐
考点: #关系运算
💡 学习锦囊
📖 相关公式与知识点:
- 关系运算符优先级:
> < >= <=高于== !=。 - 关系表达式结果为 0(假)或 1(真)。
思路分析
注意运算符优先级,先算 a > b,再算 != c。
🔄 举一反三
- 当 a=3, b=3, c=1 时,
a == b > c的值是多少?查看练习答案与解析
答案:0 解析:
b > c=3 > 1= 1,a == 1=3 == 1= 0。
(4) 下列程序运行后的输出结果是
#include <stdio.h>
main()
{
int i, j;
for (i = 4; i >= 1; i--)
{
printf("*");
for (j = 1; j <= 4 - i; j++)
printf("*");
printf("\n");
}
}2
3
4
5
6
7
8
9
10
11
12
答案:
*
**
***
****2
3
4
查看答案与解析
解析:
- i=4:输出 1 个 *,内层循环 0 次,共 1 个 *。
- i=3:输出 1 个 *,内层循环 1 次,共 2 个 *。
- i=2:输出 1 个 *,内层循环 2 次,共 3 个 *。
- i=1:输出 1 个 *,内层循环 3 次,共 4 个 *。
难度: ⭐⭐
考点: #嵌套循环
💡 学习锦囊
📖 相关公式与知识点:
- 外层循环控制行数,内层循环控制每行输出个数。
思路分析
追踪内外层循环的执行次数。
🔄 举一反三
- 若外层循环改为
for(i=1; i<=4; i++),输出图形是什么?查看练习答案与解析
答案:同样输出 1,2,3,4 个 * 的三角形。 解析:只要内层循环次数递增,图形形状不变。
(5) 若有定义:int a[3][4] = { {1,2}, {0}, {4,6,8,10} }; 则初始化后,a[1][2] 得到的初值是 0,a[2][1] 得到的初值是 6。
查看答案与解析
答案: a[1][2] = 0, a[2][1] = 6
解析: 部分初始化时,未显式初始化的元素自动为 0。
a[0] = {1, 2, 0, 0}a[1] = {0, 0, 0, 0}a[2] = {4, 6, 8, 10}
所以 a[1][2] = 0, a[2][1] = 6。
难度: ⭐⭐
考点: #数组初始化
💡 学习锦囊
📖 相关公式与知识点:
- 部分初始化时,剩余元素自动置 0。
- 二维数组可以按行初始化。
思路分析
理解部分初始化的规则。
🔄 举一反三
int a[5] = {1, 2};则 a[3] 的值是多少?查看练习答案与解析
答案:0 解析:部分初始化时,未指定的元素自动初始化为 0。
(6) 在 C 语言中,二维数组元素在内存中的存放顺序是 按行存放(行优先)。
查看答案与解析
答案: 按行存放(行优先)
解析: C 语言中二维数组按行优先顺序存储,即先存完第一行,再存第二行,以此类推。
难度: ⭐
考点: #数组存储
💡 学习锦囊
📖 相关公式与知识点:
- 行优先:a[0][0], a[0][1], ..., a[0][m-1], a[1][0], ...
思路分析
与列优先(Fortran)区分。
🔄 举一反三
- 三维数组
a[2][3][4]在内存中如何排列?查看练习答案与解析
答案:按页→行→列的顺序(最右边下标变化最快)。 解析:C 语言多维数组始终是行优先,最右维变化最快。
三、程序分析题(本大题共2题,每题10分,共20分)
描述程序功能并写出程序结果。
(1)
#include <stdio.h>
main()
{
int a, s, n, count;
a = 2; s = 0; n = 1; count = 1;
while (count <= 7)
{
n = n * a;
s = s + n;
++count;
}
printf("s=%d", s);
}2
3
4
5
6
7
8
9
10
11
12
13
查看答案与解析
答案: s=254
解析: 程序计算等比数列 2^1 + 2^2 + ... + 2^7 的和。
- n = 2, 4, 8, 16, 32, 64, 128
- s = 2 + 4 + 8 + 16 + 32 + 64 + 128 = 254
难度: ⭐⭐
考点: #循环 #等比数列
💡 学习锦囊
📖 相关公式与知识点:
- 等比数列求和公式:S = a1 * (q^n - 1) / (q - 1)。
- 本题:S = 2 * (2^7 - 1) / (2 - 1) = 2 * 127 = 254。
思路分析
识别等比数列,可以用公式验证。
🔄 举一反三
- 若 count <= 10,s 的值是多少?
查看练习答案与解析
答案:2046 解析:2 + 4 + ... + 1024 = 2*(2^10-1) = 2046。
(2)
#include <stdio.h>
main()
{
int a[3][3] = {1, 3, 5, 7, 9, 11, 13, 15, 17}, sum = 0, i, j;
for (i = 0; i < 3; i++)
for (j = 0; j < 3; j++)
if (i == j)
sum = sum + a[i][j];
printf("sum=%d\n", sum);
}2
3
4
5
6
7
8
9
10
查看答案与解析
答案: sum=27
解析: 程序求 3×3 矩阵主对角线元素之和。
- a[0][0] = 1
- a[1][1] = 9
- a[2][2] = 17
- sum = 1 + 9 + 17 = 27
难度: ⭐⭐
考点: #二维数组 #对角线求和
💡 学习锦囊
📖 相关公式与知识点:
- 主对角线:i == j。
- 副对角线:i + j == n - 1。
思路分析
理解二维数组对角线的索引规律。
🔄 举一反三
- 如何求副对角线元素之和?
查看练习答案与解析
答案:
if (i + j == 2) sum += a[i][j];解析:3×3 矩阵副对角线:a[0][2], a[1][1], a[2][0]。
四、编程题(本大题共1题,每题20分,共20分)
对 15 个数进行排序,按从小到大的顺序输出。
查看答案与解析
参考答案:
#include <stdio.h>
main()
{
int a[15], i, j, t;
/* 输入15个数 */
printf("请输入15个整数:\n");
for (i = 0; i < 15; i++)
scanf("%d", &a[i]);
/* 冒泡排序 */
for (i = 0; i < 14; i++)
for (j = 0; j < 14 - i; j++)
if (a[j] > a[j + 1])
{
t = a[j];
a[j] = a[j + 1];
a[j + 1] = t;
}
/* 输出 */
printf("排序结果:\n");
for (i = 0; i < 15; i++)
printf("%d ", a[i]);
printf("\n");
}2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
解析: 使用冒泡排序算法,通过相邻元素比较交换,将较大的元素逐步"冒泡"到后面。
难度: ⭐⭐
考点: #排序算法 #冒泡排序
💡 学习锦囊
📖 相关公式与知识点:
- 冒泡排序:时间复杂度 O(n²),空间复杂度 O(1)。
- 每轮将未排序部分的最大值移到正确位置。
思路分析
理解冒泡排序的两层循环:外层控制轮数,内层控制每轮比较次数。
易错点
- 内层循环边界:
j < n - 1 - i,避免越界和重复比较。
🔄 举一反三
- 如何用选择排序实现?
查看练习答案与解析
答案:
cfor (i = 0; i < 14; i++) { min_idx = i; for (j = i + 1; j < 15; j++) if (a[j] < a[min_idx]) min_idx = j; t = a[i]; a[i] = a[min_idx]; a[min_idx] = t; }1
2
3
4
5
6
7
8解析:每轮找到最小元素,与当前位置交换。